/**
 * 这个js里的... emmmm...  官网因为是继承类并改造  提供的方法直接粘贴不太好用
 * 以及写法和常见的函数式js有点区别  所以单开一个，用class的方式去写
 * 这个里面只会写继承于 官方类的东西  以及 少部分这个文件中用到的工具函数
 * https://aps.autodesk.com/en/docs/viewer/v7/reference/Viewing/EventUtils/         js sdk v7 的文档
 * author xhy 2023-02-10
 * **/


/**
 * 弹出面板 里面内容自己塞
 * **/
class SimplePanel extends window.Autodesk.Viewing.UI.SettingsPanel{
  constructor(parentContainer, id, title, content, options = {
    margin: 'auto',
    height: 'auto',
    width: 'auto',
    top: '100px'
  }){
    super(parentContainer, id, title);
    this.content = content;
    // Auto-fit to the content and don't allow resize.  Position at the coordinates given.
    this.container.style.height = options.height;
    this.container.style.width = options.width;
    this.container.style.resize = "none";
    this.container.style.zIndex = "999999";
    this.container.style.border = options.border;
    this.container.style.margin = options.margin;
    this.container.style.left = options.left;
    this.container.style.top = options.top;
    this.container.style.background = '#2D2D2D';
    this.container.style.overflow = 'hidden'
    this.initialize();
  }
  initialize = function(){
    // 移除某两个占位的dom节点
    this.container.removeChild(document.getElementsByClassName('docking-panel-container-solid-color-b')[0])
    this.container.removeChild(document.getElementsByClassName('docking-panel-container-solid-color-a')[0])
    this.container.appendChild(this.content);
  };
}

/**
 * Panel  中每次创建dom 太麻烦了  这个用于生成dom 直接传参数吧   未考虑children 和 text共存问题
 * sel    节点名称  如 div  p  span 等
 * props.className dom 的 class数组
 * props.style  dom 的style 对象
 * props 也可以传其他参数
 * children 子dom
 * text 文字内容
 * **/
function createDom(vNode) {
  let dom = document.createElement(vNode.sel);
  if(vNode.props.style != null){
    for(let item of Object.keys(vNode.props.style)){
      dom.style[item] = vNode.props.style[item]
    }
  }
  if(vNode.props.className && Array.isArray(vNode.props.className) && vNode.props.className.length > 0){
    dom.classList.add(...vNode.props.className);
  }
  for(let item of Object.keys(vNode.props)){
    if(item !== 'style' && item !== 'className'){
      dom[item] = vNode.props[item]
    }
  }
  if(vNode.children && vNode.children.length > 0){
    for(let item of vNode.children){
      dom.appendChild(createDom(item))
    }
  }else{
    dom.innerText = vNode.text;
  }
  return dom;
}

/**
 * 生成节点参数
 * **/
function h(sel,d,c) {
  if(arguments.length === 3){
    if(typeof c === 'string' || typeof c === 'number' || typeof c === 'boolean'){
      return vNode(sel,d,[],c)
    }else if(Array.isArray(c)){
      return vNode(sel,d,c)
    }else{
      throw new Error('参数错误')
    }
  }else if(arguments.length === 2){
    if(Array.isArray(d)){
      return vNode(sel,{},d,'')
    }else if(typeof d === 'string' || typeof d === 'number' || typeof d === 'boolean'){
      return vNode(sel,{},[],d)
    }else{
      return vNode(sel,d,[],'')
    }
  }else{
    throw new Error('参数错误')
  }
}

/**
 * 生成节点参数
 * **/
function vNode(sel,props,children,text) {
  if(typeof sel !== 'string' || sel === ''){
    throw new Error('参数错误 无sel')
  }
  return {
    sel,
    props,
    children,
    text
  }
}

export default {
  SimplePanel,
  createDom,
  h,
}
